#include<bits/stdc++.h> 
using namespace std;
//	福布斯杂志每年都会根据一些指标公开一系列百万富翁。现在你需要模拟这个过程，但是只需要
//	关注一定年龄范围内的人即可。现在给定N个人，你需要在给定的年龄范围内找到M个最富有的人
//1.每个输入都包含一个测试用例，对于每个测试用例，第一行包括两个正整数N≤100000，K≤1000
//	分别表示总人数和查询条件数。
//2.然后跟着N行，每行包括一个名字，一个年龄，一个财富。名字是不超过8位的不含空格的字符串
//	年龄范围(0,200]，财富[-1000000,1000000]。
//3.最后跟着K行，每行都包括三个正整数M≤100，[Amin,Amax]，分别表示富翁个数和年龄范围。
//4.对于每个查询，第一行输出Case #X:，其中X是从1开始的查询号。然后输出M个在这个范围内的人
//	每个人的信息再各占一行，格式为 姓名 年龄 财富。输出必须按照财富非递增输出，遇到同财富
//	的人，就按照年龄非递减来，再相同就按照名字非递减来。没结果的就输出None
//5.排序，统计
//这题很基础，也不考性能，所以一般做法就行了 
struct People{
	string name;
	int age;
	int wealth;
}; 
bool cmp(People a, People b){
	if(a.wealth!=b.wealth) return a.wealth>b.wealth;
	else if(a.age!=b.age) return a.age<b.age;
	else if(a.name!=b.name) return a.name<b.name;
	else return false;
}
int main(){
	int N,K;
	cin>>N>>K;
	People pps[N]; 
	for(int i = 0;i<N;i++){
		cin>>pps[i].name;
		scanf("%d %d", &pps[i].age, &pps[i].wealth);
	} 
	sort(pps, pps+N, cmp);
	for(int i = 1;i<=K;i++){
		printf("Case #%d:\n", i);
		int M, amin, amax;
		scanf("%d %d %d", &M, &amin, &amax);
		int count_ = 0;
		for(int j = 0;j<N;j++){
			if(count_==M) break;
			if(pps[j].age<=amax && pps[j].age>=amin){
				printf("%s %d %d\n", pps[j].name.c_str(), pps[j].age, pps[j].wealth);
				count_++;
			}
		}
		if(count_==0) printf("None\n");
	}
	return 0;
}